// // for+递归
// function flatten(arr) {
//   let res = [];
//   for (let i = 0; i < arr.length; i++) {
//     if (Array.isArray(arr[i])) {
//       // res = res.concat(flatten(arr[i]))
//       res.push(...flatten(arr[i])); 
//     } else {
//       res.push(arr[i]);
//     }
//   }
//   return res;
// }

// ES6
// function flatten(arr) {
//   while (arr.some(item => Array.isArray(item))) {
//     arr = [].concat(...arr);
//   }
//   return arr;
// }

function flatten(arr) {
  return arr.reduce((prev, next) => {
    return prev.concat(Array.isArray(next) ? flatten(next) : next);
  }, [])
}

var arr = [1, [1, 2, [2, 3, 4]]];
console.log(flatten(arr));
